Tema 05 - Análisis Exploratorio de Datos (AED)

Técnicas para ‘Big Data’ en Economía - Curso 2024/25
Universidad de Alicante

Pedro Albarrán

Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante

De los datos en bruto a la información

image/svg+xml

  • AED es una fase inicial importante, con dos objetivos:

    • Conocer nuestros datos e identificar problemas \(\Longrightarrow\) Preprocesamiento

      • qué variables, tipo de información, calidad (información faltante, inconsistencias, problemas en combinación de datos.)
    • Análisis descriptivo: identificar patrones y encontrar escenarios de análisis

  • NO hay una “receta”: el proceso es diferente con distintos datos o con los mismos datos para diferentes objetivos

  • Es un proceso iterativo para descubrir información

Primera aproximación a los datos

  • Contexto: conocimiento previo de nuestros datos, aquí o aquí

    • fuente (de dónde han salido), cómo están almacenados (.csv, .xlsx, …)

    • “diccionario”: información de cada variable (descripción, unidades, etc.)

  • Cargar los datos
Bank <- read_csv2("data/BankMarketing.csv")
Boston <- read_csv("data/BostonHousing.csv")
  • Reconocimiento inicial de las características de los datos: número de observaciones y de variables, tipo de cada variable, etc.
glimpse(Bank)  # str(Bank)
View(Bank)     # head(Bank)
  • NO TODO lo que hagamos se incluirá en un documento para comunicar

Primera aproximación a los datos (cont.)

  • Limpiar y procesar los datos:

    • Debemos asegurarnos de que los datos son ordenados
    • ¿Tienen las variables la información y el tipo adecuado? Convertimos datos a factores, numéricas, etc.
    • Transformamos variables (logaritmos, discretizar variables continuas), creamos nuevas o renombramos para mayor claridad
    • ¿Mantenemos solo algunas variables u observaciones?
  • Un caso destacado: ¿cuántos NA? ¿qué hacer con ellos?

Bank %>%  is.na() %>% summary()
Bank %>% summary()
load("data/earn.RData")
earn %>% is.na() %>% summary()
  • NO ES UNA RECETA: más adelante puede que volvamos hacia atrás o rehagamos parte de esto y decidiremos sobre NAs al modelizar

Análsis de Variación (“univariante”)

  • La variación es la tendencia de los valores de una variable a cambiar entre medidas (p.e., educación de dos personas o ventas de dos empresas)

  • Las técnicas para analizar el patrón de variación, es decir, la distribución de valores, dependen del tipo de variable

  • Variables Categóricas (previamente convertidas a factores):

    • Conteos, Porcentajes, Moda
      • con summary(), count(), table(), summarize(), mode()
    • Visualización: Gráficos de Barras (también, quizás, circulares)
  • Variables Numéricas:

    • Estadísticas Descriptivas: Mínimo, Máximo, Media, Mediana, Moda
      • con summary() o summarize() con funciones para estadísticos
    • Dispersión: Rango, Varianza, Desviación Estándar, Cuartiles.
    • Visualización: Histogramas, Densidades, Boxplots.

Visualizando distribuciones

  • Variables Categóricas: gráficos de barras para conteos o porcentajes
g0 <- ggplot(data = Bank) 
g0 + geom_bar(aes(x = job)) + 
        theme(axis.text.x = element_text(angle = 90))
g0 + geom_bar( aes(x = "", fill = education))
Bank %>% count(education) %>% mutate(prop = n / sum(n)) %>% 
  ggplot() + geom_bar(aes(x = education, y = prop), stat = "identity")
  • Para variables continuas, usar un histograma o densidad (o ambos)
g0 + geom_histogram(mapping = aes(x = age), binwidth = 5)
g0 + geom_density(mapping = aes(x = balance)) + scale_x_log10()
Boston %>%  ggplot(aes(x=medv)) + 
  geom_histogram(aes(y=..density..)) + geom_density() 
  • Consideramos varios anchos del intervalo: pueden revelar diferentes patrones
g0 + geom_histogram(mapping = aes(x = age), binwidth = 1)
g0 + geom_histogram(mapping = aes(x = age), binwidth = 10)

Visualizando distribuciones (cont.)

  • Los gráficos de caja también aportan información para distribuciones continuas
ggplot(Boston) + geom_boxplot(mapping = aes(y = medv))

Aspectos a prestar atención

  • Valores frecuentes, concentración en valores concretos (p.e., ceros, números “redondos”, etc.): ¿por qué se producen? ¿son “esperables”?
  • ¿Tienen sentido las categorías de las variables cualitativas?
    • agrupar valores con pocas observaciones
    • crear categorías más “finas”o más agregadas (ej. de países a continentes)
  • ¿Sería preferible discretizar alguna variable continua?

  • Variables con alta dispersión o distribución asimétrica (logs?)

  • Variables con información redundante, homogeneizar valores, normalidad(?)
  • Valores inusuales (“atípicos” o “outliers”): no encajan en el patrón general

    • ¿cambian los resultados del análisis sin ellos? ¿Qué los ha causado?

Otras herramientas para AED

  • Para una primera aproximación automática , pero NO todas para incluir en un informe final
library(skimr)
skim(Bank)   # ¿para incluir en un informe?
library(DataExplorer)
plot_bar(Bank)        # para TODAS las variables categóricas
plot_histogram(Bank)  # para TODAS las variables numéricas
  • La biblioteca modelsummary() incluye funciones como datasummary_skim() y datasummary()

Otras herramientas: dlookr

  • describe(): estadísticos como un data frame, para usar con kable()
library(dlookr)            # en MacOS, puede pedir instalar XQuartz
describe(Bank, campaign:y)

Bank %>% describe() %>%
  select(described_variables, skewness, mean, p25, p50, p75) %>% 
  filter(!is.na(skewness)) %>% arrange(desc(abs(skewness)))

Bank %>%
  group_by(education) %>% 
  describe(age, balance, campaign, pdays) 
earn %>% eda_web_report()

Análisis de Covariación (“multivariante”)

  • La variación describe el comportamiento dentro de una variable

  • La covariación describe relaciones entre variables: tendencia a que sus valores cambien juntos

  • Útil para formular modelos, que explican patrones complejos de los datos

    • ¿qué explica la relación sugerida por el patrón de covariación?

    • ¿cómo de fuerte es la relación?

    • ¿otras variables pueden afectar a la relación? ¿varían por subgrupos?

  • Covariación implica que los valores de una variable se pueden predecir a partir de otra

    • ¿es la covariación una relación causal?

Una variable continua y una categórica

  • ¿Es diferente la distribución de Y (continua) por categorías de X? Si \(\small{\Pr(Y|X=x_1) = \Pr(Y|X=x_0) = \Pr(Y)} \Rightarrow\) Y NO depende de X

1.- mediante el histograma o densidad (en el mismo gráfico o diferentes)

ggplot(Bank) + geom_density(aes(x = balance, color = default))  + scale_x_log10()
ggplot(Bank) + geom_density(aes(x = balance)) + facet_wrap(~default)  + scale_x_log10()
ggplot(Boston) + geom_density(aes(x=lstat, color=as.factor(chas))) 

2.- mediante gráficos de caja: menos información pero más fácil de comparar

ggplot(Boston) + geom_boxplot(aes(x=medv, y=as.factor(chas)))
ggplot(Bank) + geom_boxplot(aes(x=duration, y=as.factor(y)))
  • Si un grupo es mucho más pequeño, es difícil ver las diferencias

  • Se pueden necesitar reordenar las categorías de un factor, rotar los ejes, etc.

“Correlación” entre una variable continua y una categórica

  • La regresión simple también describe una relación: equivale a calcular la media de la variable continua por grupos definidos por la categórica

\[ E[Y|X]=\beta_0+\beta_1 X \Rightarrow \begin{cases} E[Y|X=0] &=\beta_0 \\ E[Y|X=1]&=\beta_0+\beta_1 \end{cases} \]

summary(lm(data = Bank, balance ~ default))
Bank %>% group_by(default) %>% summarise(media = mean(balance))

Bank %>% group_by(y) %>% summarise(media = mean(duration))
  • ¿Mediante la correlación? NO tiene sentido cuando una variable es categórica
  • Para variables dependientes categóricas veremos una variante de regresión lineal: regresión logística

Dos variables categóricas

  • Tabular/visualizar el número de observaciones para cada combinación
Bank %>% count(job, education) %>% pivot_wider(names_from = education, values_from = n)
ggplot(Bank, aes(y=job, x=education)) + geom_count() 
ggplot(Bank, aes(y=job, x=education)) + geom_count(aes(size=after_stat(prop), group=1)) 
  • También se pueden visualizar sus histogramas
Bank %>%  ggplot(aes(x=y)) + geom_bar(aes(fill=education)) 
Bank %>%  ggplot(aes(x=y)) + geom_bar(aes(fill=education), position="dodge2")
Bank %>%  ggplot(aes(x=y)) + geom_bar()+ facet_wrap(~education)
  • O los histogramas de proporciones generados manualmente
Bank %>% group_by(education, y) %>% summarise(n=n()) %>%  
   group_by(education) %>% mutate(prop=n/sum(n)) %>% 
   ggplot() + geom_bar(aes(x=education, y = prop), stat ="identity") + facet_wrap(~y)

Dos variables continuas

  • La forma obvia de visualizar relaciones entre variables continuas es un gráfico de dispersión; añadir smoothers ayuda a apreciar un patrón en los puntos
ggplot(Boston, aes(y=medv, x=lstat)) + geom_point() + geom_smooth()
ggplot(Boston, aes(y=medv, x=lstat)) + geom_point() + geom_smooth() +
  scale_y_log10()
library(GGally)
Boston %>% ggpairs()
  • Otra opción categorizar una variable continua y usar las técnicas anteriores
ggplot(Bank) + geom_boxplot(aes(x= balance, y=cut_width(age, 10)))  +
  scale_x_log10()
Bank %>% mutate(agegroup=cut(age, breaks=seq(20, 70, by=10))) %>% 
  ggplot()  + geom_boxplot(aes(x= balance, y =agegroup)) 

Correlación entre variables continuas

  • Obviamente podemos calcular modelos de regresión con dos variables continuas
summary(lm(data = Boston, medv ~ lstat) )
  • Y también correlaciones (dos variables, múltiples, visualizándolas)
cor(Boston$medv, Boston$lstat, use = "complete.obs")
Boston %>% select(medv, lstat) %>%  dlookr::correlate()

Boston %>%  dlookr::correlate()
Boston %>%  group_by(chas) %>%  dlookr::correlate() %>% plot()

library(corrplot)
corrplot(cor(Boston))
corrplot.mixed(cor(Boston))

Más herramientas de AED “automático”

  • Muchas partes del AED son parcialmente “automatizables”: muchos paquetes tratan de facilitar esas partes

  • Radiant, que puede probarse online

  • GwalkR, explore

library(GWalkR)
data(iris)
gwalkr(iris)
  • DataMaid, smartEDA
library(dataMaid)
makeDataReport(Bank, output = "pdf", replace = TRUE)
  • Otras partes y sobre la interpretación del AED es muy específica de los datos y del objetivo del estudio